home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cswitc / mt.c < prev    next >
C/C++ Source or Header  |  1990-06-19  |  2KB  |  97 lines

  1. #include "stdio.h"
  2. #include "dos.h"
  3. #include "tcb.h"
  4.  
  5. extern int tcblist[];
  6. extern int readyq[];
  7. extern int swap_count;
  8. extern int idlecount;
  9. extern int noswap;
  10. extern int mustswap;
  11. extern int findlargemem();
  12.  
  13. int lines_read;
  14. char msgbuf[1024];
  15.  
  16. extern void relinq();
  17.  
  18. int sem4test();
  19. int readfile();
  20.  
  21. main()
  22. {
  23.     union REGS ir;
  24.     unsigned int j,k;
  25.     long lj;
  26.     k=0;
  27.  
  28.     puts("Multitasking test.");
  29.     start_mt();
  30.     start_swapping();
  31.  
  32.     j=findlargemem();
  33.     lj=(long)j * 16L;
  34.     printf("%ld bytes available\n",lj);
  35.  
  36.     puts("waiting for semaphore to be set ");
  37.  
  38.     spawn(sem4test,4);
  39.  
  40.     while(sem_test(1)==-1) relinq();
  41.  
  42.     sem_attach(1);
  43.  
  44.     sem_release(1);
  45.     
  46.     puts("got semaphore #1");
  47.  
  48.     spawn(readfile,4);
  49.  
  50.     for(;;)
  51.     {
  52.         printf("Loop = %d   idle=%d   swap=%d   read=%d\n",
  53.             k++,idlecount,swap_count, lines_read);
  54.         if(kbhit()) break;
  55.  
  56.         if(testmsg(1))
  57.         {
  58.             recvmsg(1,msgbuf,1000);
  59.             puts(msgbuf);
  60.         }
  61.     }
  62.     end_mt();
  63.     getch();
  64. }
  65.  
  66. sem4test()
  67. {
  68.     int j,k,n;
  69.     union REGS ir;
  70.  
  71.     sem_attach(1);
  72.     sleep(3);
  73.     sem_release(1);
  74.     spawn_exit();
  75. }
  76.  
  77. readfile()
  78. {
  79.     FILE *fp;
  80.     char buf[120];
  81.     union REGS ir;
  82.     int j;
  83.  
  84.     fp=fopen("mt.c","r");
  85.     for(;;)
  86.     {
  87.         if(fgets(buf,80,fp)==NULL) break;
  88.         lines_read++;
  89.         relinq();
  90.     }
  91.     send_md_msg(1,"\n\n\n\nWere done now\n\n\n", 24);
  92.     fclose(fp);
  93.     lines_read+=1000;
  94.     spawn_exit();
  95. }
  96.  
  97.